package solutiondemo;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: 黎鹤舞
 * Date: 2023-12-05
 * Time: 17:52
 */
/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode() {}
 *     ListNode(int val) { this.val = val; }
 *     ListNode(int val, ListNode next) { this.val = val; this.next = next; }
 * }
 */

//给你一个链表的头节点 head 和一个整数 val ，请你删除链表中所有满足 Node.val == val 的节点，并返回 新的头节点 。
class Solution {
    public ListNode removeElements(ListNode head, int val) {

        //表示所需要删除的结点的先驱结点：
        ListNode pre = head;
        //先判断head是否为空:
        if(pre == null) {
            return null;
        }
        ListNode cur = head.next;
        //遍历到链表结束:
        while( cur != null) {
            //如果cur匹配到对应的值:
            if(cur.val == val) {
                cur = cur.next;
                pre.next = cur;
            }else {
                cur = cur.next;
                pre = pre.next;
            }
        }
        //如果第一个元素就是要删除的元素:即头元素是所需删除的元素
        if(head.val == val) {
            head = head.next;
        }
        return head;
    }
}